package com.eonmind.common.provider.entity.vip;

import com.eonmind.common.contract.enums.DelEnum;
import com.mongoplus.annotation.ID;
import com.mongoplus.annotation.collection.CollectionName;
import com.mongoplus.enums.IdTypeEnum;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;
import java.util.List;

/**
 * 套餐实体
 */
@Data
@CollectionName("vipPackage")
@FieldNameConstants
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
@ToString
public class VipPackage {
    /**
     * 套餐唯一标识ID
     */
    @ID(type = IdTypeEnum.AUTO)
    private Long id;

    /**
     * 套餐代码 - 唯一业务标识，用于程序识别
     * 示例: "explorer_3day", "info_searcher_monthly"
     */
    private String code;

    /**
     * 套餐名称 - 显示给用户的名称
     */
    private String name;

    /**
     * 套餐分类 - 用于区分不同类型的套餐
     * 可选值: "explorer"-资源探索家, "searcher"-资讯搜索家, "dimension_lord"-次元领主, "top_up"-加油包
     */
    private Integer category;

    /**
     * 套餐等级 - 数字越大等级越高，用于权益叠加计算
     * 示例: 1-基础套餐, 2-高级套餐
     */
    private Integer tier;

    /**
     * 套餐原价 - 原始价格，用于显示折扣信息
     * 示例: 99.97
     */
    private Double originalPrice;

    /**
     * 当前价格 - 实际销售价格
     * 示例: 49.98
     */
    private Double currentPrice;

    /**
     * 货币类型 - 使用的货币单位
     * 默认: "CNY"-人民币
     */
    private String currency = "CNY";

    /**
     * 折扣百分比 - 0-100的整数，0表示无折扣
     * 示例: 50 (表示5折)
     */
    private Integer discount;

    /**
     * 每日赠送拉币数量 - 用户每天可获得的拉币
     * 示例: 100000
     */
    private Integer dailyCoins;

    /**
     * 总拉币数量 - 仅对加油包有效
     * 示例: 100000 (加油包)
     */
    private Integer totalCoins;

    /**
     * 有效天数 - 套餐的有效时长
     * 示例: 3 (3天), 30 (30天)
     */
    private Integer duration;

    /**
     * 消费数量
     * 示例: "限时5折", "限时2.5折"
     */
    private Integer sales;

    /**
     * 套餐标签 - 用于显示特殊标识
     * 示例: "限时5折", "限时2.5折"
     */
    private String tag;

    /**
     * 包含的功能列表 - 套餐包含的系统功能
     * 示例: ["chat", "drawing", "music", "video", "ppt"]
     */
    private List<String> features;

    /**
     * 套餐描述 - 详细的套餐说明
     * 示例: "无限使用对话、绘画功能"
     */
    private String description;

    /**
     * 赠送的附加福利 - 购买套餐额外获得的福利
     */
    private List<Bonus> bonuses;

    /**
     * 是否推荐套餐 - 用于前台突出显示
     * 默认: false
     */
    private Boolean isFeatured = false;

    /**
     * 套餐是否可购买 - 控制套餐上下架
     * 默认: true
     */
    private Boolean isActive = true;

    // 创建时间
    private Long createTime;

    // 更新时间
    private Long updateTime;

    private Integer aiDraw;

    private Integer aiVideo;

    // 是否删除
    private Integer del = DelEnum.UN_DEL.getCode();

    /**
     * 附加福利内部类 - 描述套餐赠送的额外福利
     */
    @Data
    @Accessors(chain = true)
    public static class Bonus {
        /**
         * 福利ID - 唯一标识
         * 示例: "gpt_tutorial"
         */
        private String id;

        /**
         * 福利名称 - 显示给用户的名称
         * 示例: "GPT使用教程"
         */
        private String name;

        /**
         * 福利价值 - 标称价值，单位元
         * 示例: 999
         */
        private Integer value;

        /**
         * 福利类型 - 标识福利类别
         * 示例: "tutorial"-教程, "keywords"-关键词
         */
        private String type;

        /**
         * 领取方式 - 如何获得该福利
         * 可选值: "auto"-自动发放, "manual"-需联系客服
         */
        private String claimMethod;
    }
}
